/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
 var levelOrder = function(root) {
    let res = []  // 生成结果数组
    let queue = [] // 用队列来模拟层序遍历
    if(root === null){ // 处理特殊情况
      return res
    }
    queue.push(root) // 将根节点放入
    while(queue.length){ // 当队列还有值的时候 
      let curLever = [] // 生成第一层的数组
      let len = queue.length // 获得第一层的个数
      for(let i = 0;i < len;i++){ // 遍历这一层
        let node = queue.shift() // 弹出节点
        curLever.push(node.val) // 放入第一层数组
        if(node.left) queue.push(node.left) // 将节点左节点放入队列 
        if(node.right) queue.push(node.right) // 将节点右节点放入队列  因为这个先进先出的原则 所以会一层一层的弹出到响应的层数组中
      }
      res.push(curLever) // 层数组放入结果数组
    }
    return res // 返回结果
};